You are given two 0-indexed integer arrays nums1
and nums2
, both of length n
.
You can choose two integers left
and right
where 0 <= left <= right < n
and swap the subarray nums1[left...right]
with the subarray nums2[left...right]
.
- For example, if
nums1 = [1,2,3,4,5]
andnums2 = [11,12,13,14,15]
and you chooseleft = 1
andright = 2
,nums1
becomes[1,12,13,4,5]
andnums2
becomes[11,2,3,14,15]
.
You may choose to apply the mentioned operation once or not do anything.
The score of the arrays is the maximum of sum(nums1)
and sum(nums2)
, where sum(arr)
is the sum of all the elements in the array arr
.
Return the maximum possible score.
A subarray is a contiguous sequence of elements within an array. arr[left...right]
denotes the subarray that contains the elements of nums
between indices left
and right
(inclusive).
Input: nums1 = [60,60,60], nums2 = [10,90,10] Output: 210 Explanation: Choosing left = 1 and right = 1, we have nums1 = [60,90,60] and nums2 = [10,60,10]. The score is max(sum(nums1), sum(nums2)) = max(210, 80) = 210.
Input: nums1 = [20,40,20,70,30], nums2 = [50,20,50,40,20] Output: 220 Explanation: Choosing left = 3, right = 4, we have nums1 = [20,40,20,40,20] and nums2 = [50,20,50,70,30]. The score is max(sum(nums1), sum(nums2)) = max(140, 220) = 220.
Input: nums1 = [7,11,13], nums2 = [1,1,1] Output: 31 Explanation: We choose not to swap any subarray. The score is max(sum(nums1), sum(nums2)) = max(31, 3) = 31.
n == nums1.length == nums2.length
1 <= n <= 105
1 <= nums1[i], nums2[i] <= 104
implSolution{pubfnmaximums_spliced_array(nums1:Vec<i32>,nums2:Vec<i32>) -> i32{let n = nums1.len();letmut prefix_sum1 = vec![0; n + 1];letmut prefix_sum2 = vec![0; n + 1];letmut max_diff12 = 0;letmut max_diff21 = 0;letmut ret = 0;for i in0..n { prefix_sum1[i + 1] = prefix_sum1[i] + nums1[i]; prefix_sum2[i + 1] = prefix_sum2[i] + nums2[i];}for i in0..n { max_diff12 = max_diff12.max(prefix_sum1[i] - prefix_sum2[i]); max_diff21 = max_diff21.max(prefix_sum2[i] - prefix_sum1[i]); ret = ret.max(prefix_sum1[n] + prefix_sum2[i + 1] - prefix_sum1[i + 1] + max_diff12); ret = ret.max(prefix_sum2[n] + prefix_sum1[i + 1] - prefix_sum2[i + 1] + max_diff21);} ret }}